{% if DEVICE_METADATA['localhost']['switch_type'] == "dpu" %}
[]
{% else %}
{% set ipv4_addresses = [] %}
{% set ipv6_addresses = [] %}
{% set ipv4_vlan_addresses = [] %}
{% set ipv6_vlan_addresses = [] %}
{% set ipv4_loopback_addresses = [] %}
{% set ipv6_loopback_addresses = [] %}
{% if DEVICE_METADATA['localhost']['sub_role'] == 'FrontEnd' or  DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd'%}
{% set loopback_intf_names = ['Loopback0', 'Loopback4096'] %}
{% else %}
{% set loopback_intf_names = ['Loopback0', 'Loopback2', 'Loopback3'] %}
{% endif %}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
    {%- if prefix | ipv4 and name in loopback_intf_names %}
        {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
        {%- set ipv4_loopback_addresses = ipv4_loopback_addresses.append(prefix) %}
    {%- endif %}
    {%- if prefix | ipv6 and name in loopback_intf_names   %}
        {%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
        {%- set ipv6_loopback_addresses = ipv6_loopback_addresses.append(prefix) %}
    {%- endif %}
{% endfor %}
{% set subnet_decap = namespace(enable=false) %}
{% for config in SUBNET_DECAP %}
    {%- if SUBNET_DECAP[config].status == 'enable' %}
        {%- set subnet_decap.enable = true %}
    {%- endif %}
{% endfor %}
{% for (name, prefix) in INTERFACE|pfx_filter %}
    {%- if prefix | ipv4 %}
        {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
    {%- endif %}
    {%- if prefix | ipv6 %}
        {%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
    {%- endif %}
{% endfor %}
{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
    {%- if prefix | ipv4 %}
        {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
    {%- endif %}
    {%- if prefix | ipv6 %}
        {%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
    {%- endif %}
{% endfor %}
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
    {%- if prefix | ipv4 %}
        {%- set ipv4_vlan_addresses = ipv4_vlan_addresses.append(prefix) %}
    {%- endif %}
    {%- if prefix | ipv6 %}
        {%- set ipv6_vlan_addresses = ipv6_vlan_addresses.append(prefix) %}
    {%- endif %}
{% endfor %}
{%- set ipv4_addresses = ipv4_addresses + ipv4_vlan_addresses %}
{%- set ipv6_addresses = ipv6_addresses + ipv6_vlan_addresses %}
[
{% if ipv4_loopback_addresses %}
{% if subnet_decap.enable %}
    {
        "TUNNEL_DECAP_TABLE:IPINIP_SUBNET" : {
            "tunnel_type":"IPINIP",
            "dscp_mode":"uniform",
{% if "mlnx" in DEVICE_METADATA.localhost.platform %}
            "ecn_mode":"standard",
{% else %}
            "ecn_mode":"copy_from_outer",
{% endif %}
            "ttl_mode":"pipe"
        },
        "OP": "SET"
    },
{% for prefix in ipv4_vlan_addresses|sort %}
    {
        "TUNNEL_DECAP_TERM_TABLE:IPINIP_SUBNET:{{ prefix | network }}/{{ prefix | prefixlen }}" : {
            "term_type":"MP2MP",
            "subnet_type": "vlan"
        },
        "OP": "SET"
    },
{% endfor %}
{% endif %}
    {
        "TUNNEL_DECAP_TABLE:IPINIP_TUNNEL" : {
            "tunnel_type":"IPINIP",
            "dscp_mode":"uniform",
{% if "mlnx" in DEVICE_METADATA.localhost.platform %}
            "ecn_mode":"standard",
{% else %}
            "ecn_mode":"copy_from_outer",
{% endif %}
            "ttl_mode":"pipe"
        },
        "OP": "SET"
    }
{%- if ipv4_addresses -%}
,
{% endif %}
{% for prefix in ipv4_addresses|sort %}
    {
        "TUNNEL_DECAP_TERM_TABLE:IPINIP_TUNNEL:{{ prefix | ip }}" : {
            "term_type":"P2MP"
        },
        "OP": "SET"
    }{% if not loop.last %},
{% endif %}
{% endfor %}
{% endif %}
{% if ipv4_loopback_addresses and ipv6_loopback_addresses %},
{% endif %}
{% if ipv6_loopback_addresses %}
{% if subnet_decap.enable %}
    {
        "TUNNEL_DECAP_TABLE:IPINIP_SUBNET_V6" : {
            "tunnel_type":"IPINIP",
            "dscp_mode":"uniform",
{% if "mlnx" in DEVICE_METADATA.localhost.platform %}
            "ecn_mode":"standard",
{% else %}
            "ecn_mode":"copy_from_outer",
{% endif %}
            "ttl_mode":"pipe"
        },
        "OP": "SET"
    },
{% for prefix in ipv6_vlan_addresses|sort %}
    {
        "TUNNEL_DECAP_TERM_TABLE:IPINIP_SUBNET_V6:{{ prefix | network }}/{{ prefix | prefixlen }}" : {
            "term_type":"MP2MP",
            "subnet_type": "vlan"
        },
        "OP": "SET"
    },
{% endfor %}
{% endif %}
    {
        "TUNNEL_DECAP_TABLE:IPINIP_V6_TUNNEL" : {
            "tunnel_type":"IPINIP",
            "dscp_mode":"uniform",
{% if "mlnx" in DEVICE_METADATA.localhost.platform %}
            "ecn_mode":"standard",
{% else %}
            "ecn_mode":"copy_from_outer",
{% endif %}
            "ttl_mode":"pipe"
        },
        "OP": "SET"
    }{% if ipv6_addresses %},
{% endif %}
{% for prefix in ipv6_addresses|sort %}
    {
        "TUNNEL_DECAP_TERM_TABLE:IPINIP_V6_TUNNEL:{{ prefix | ip }}" : {
            "term_type":"P2MP"
        },
        "OP": "SET"
    }
{%- if not loop.last -%}
,
{% endif %}
{% endfor %}
{% endif %}

]
{% endif %}

